﻿using System.Windows;
using System.Windows.Controls;
using civilisationLib.GeneratedCode.Implementation;
using Implementation;
using Interfaces;
using System.IO;
using System.Windows.Input;
using System.Windows.Media;
using System;
using System.Windows.Media.Imaging;

/**
 * 
 * \file ChoixCarte.xaml.cs
 * \brief Carte Xaml
 * \author Baptiste Villiot - Jonathan Langlais
 * \version 1.0
 * 
 */
namespace CivilisationWPF
{
    /**
   * 
   * \class ChoixCarte
   * \brief Affiche les possibilites de choix de la carte ainsi que les chargements possibles
   * 
    */
    public partial class ChoixCarte : Canvas
    {
        /**
         * !< le monteur de partie
         */
        private MonteurPartie monteur;

        /**
         * !< la fenetre ou est affichee la carte
         */
        private MainWindow main;

        /**
         * \fn ChoixCarte(MainWindow main)
         * \brief Constructeur de ChoixCarte
         * \param[in] main la fenetre
         */
        public ChoixCarte(MainWindow main)
        {
            //ImageBrush bi = new ImageBrush();
            //bi.ImageSource = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(CivilisationWPF.Properties.Resources.logo.GetHbitmap(), IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions());
            //back.Background = bi;
            monteur = new MonteurPartieImpl();
            this.main = main;
            InitializeComponent();
            initLoad();
        }

        /**
         * \fn buttonClick(object sender, RoutedEventArgs e)
         * \brief affiche les champs pour les joueurs
         * \param[in] sender l'objet qui fait appel a la methode
         * \param[in] e l'evenement lance
         */
        public void buttonClick(object sender, RoutedEventArgs e)
        {
            if (strategieCartePetite.IsSelected)
            {
                choixJoueur.Content = new JoueurCivil(monteur, MonteurPartieImpl.strategie.petiteCarte,main);
            }
            else if (strategieCarteGrande.IsSelected)
            {
                choixJoueur.Content = new JoueurCivil(monteur, MonteurPartieImpl.strategie.grandeCarte, main);
            }
            else
            {
                choixJoueur.Content = new JoueurCivil(monteur, MonteurPartieImpl.strategie.petiteCarte, main);
            }
        }

        /**
         * \fn initLoad()
         * \brief initialise la sauvegarde
         * \param[in] sender l'objet qui fait appel a la methode
         * \param[in] e l'evenement lance
         */
        public void initLoad() {
            int i = 0;
            if (!Directory.Exists("sauvegarde"))
            {
                Directory.CreateDirectory("sauvegarde");
            }

            foreach(string o in Directory.EnumerateFiles("sauvegarde"))
            {
                ListBoxItem item = new ListBoxItem();
                item.Content = o;
                item.PreviewMouseLeftButtonDown += Chargement_MouseLeftButtonDown;
                listeSave.Items.Add(item);
                i++;
            }
        }

        /**
         * \fn Chargement_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
         * \brief affiche le bouton chargement
         * \param[in] sender l'objet qui fait appel a la methode
         * \param[in] e l'evenement lance
         */
        void Chargement_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            chargement.Visibility = System.Windows.Visibility.Visible;
        }

        /**
         * \fn chargerPartie(object sender, RoutedEventArgs e)
         * \brief charge la partie selectionnee
         * \param[in] sender l'objet qui fait appel a la methode
         * \param[in] e l'evenement lance
         */
        public void chargerPartie(object sender, RoutedEventArgs e)
        {
            SaveLoadPartie saveLoad = new SaveLoadPartie();

            ListBoxItem item = listeSave.SelectedItem as ListBoxItem;

            MonteurPartie monteur = saveLoad.DeSerializeObject(item.Content as string);

            CarteXaml carte = new CarteXaml(monteur,main);

            carte.faireCarte(monteur.Carte);

            main.content.Content = carte;
        }
    }
}
